﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Net;
using System.Xml;
using System.Text.RegularExpressions;


namespace data_mining
{
    public partial class Form1 : Form
    {
        string article;
        string location_a; //시 단위
        string location_b; //구,군 단위
        string location_c; //동 단위

        public void si_check(string article)
        {
            string[] locat = new string[] { "서울", "부산", "대구", "인천", "광주", "대전", "울산", "경기", "강원", "충북", "충남", "전북", "전남", "경북", "경남", "제주" };

            int num;
            //MessageBox.Show(article);
            article = richTextBox1.Text;
            try
            {

                for (int i = 0; i < locat.Length; i++)
                {
                    num = article.IndexOf(locat[i]);
                    if (num.ToString() != "-1")
                    {
                        MessageBox.Show(locat[i].ToString() + "이 검출 되었습니다.");
                        location_a = locat[i].ToString();
                        label1.Text = location_a;
                    }

                }

                //    MessageBox.Show(location_a);

                //구 찾는 정규 표현식 와일드 카드 이용


            }
            catch {
                MessageBox.Show("기사가 선택 되지 않았습니다.");
            }
        }

        public Form1()
        {
            InitializeComponent();
            

            MySql.Data.MySqlClient.MySqlConnection conn;
            string myConnectionString;
            myConnectionString = "server=localhost;uid=root;pwd=apmsetup;database=sec;";

            try
            {
                conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
                conn.Open();
                //DB연결 체크를 한다.

                string strQry = "select * from callinfo";
                //전체 select 쿼리 한번 날려보기

                MySql.Data.MySqlClient.MySqlCommand Com_svr = new MySql.Data.MySqlClient.MySqlCommand();
                Com_svr.Connection = conn;
                Com_svr.CommandType = CommandType.Text;
                Com_svr.CommandText = strQry;
                Com_svr.ExecuteNonQuery();           
            }
            catch
            {
                MessageBox.Show("DB 연결이 안됨");
            }



        }

        private void button1_Click(object sender, EventArgs e)
        {

            // article string 에는 DB에서 기사 내용을 가져와서 보여주기 입니다.
            article = "【부산=뉴시스】강재순 기자 = 새누리당 부산시당은 제19대 국회의원선거 부산 후보들은 공식선거 첫날인 29일 출근길 인사로 본격 선거운동을 시작한다고 28일 밝혔다.출근길 인사는 오전 6시30분부터 출근시간까지 선거구별 각 거점 주요도로에서 후보자와 선거운동원 등이 주요 도로가 등에서 대규모 출근길 인사를 실시한다는 계획이다.이어 오전 8시부터 각 선거구별로 유동인구가 많은 거점 지역에서 가족행복 5대 공약 퍼포먼스로 각 선거구별 유동인구 많은 거점 지역에서 후보와 선거운동원 3명씩이 동시에 4종류 피켓(가족행복 5대 공약)을 함께 들고 홍보한다.또 오전 9시20분 부산 중앙공원 충혼탑에서 부산선대위원장, 시당위원장, 후보자가 헌화 및 분향을 하며, 분향 직후 후보자들이 합동으로 정책피켓 선거운동인 가족행복 5대 공약 퍼포먼스를 이어간다는 계획이다.";
            richTextBox1.Text = article;
            

            // 일단 전국의 시,도 단위의 정보를 검색 후에 추출 한다. 
            // 그리고 구,군 단위를 추출한다.
            // 상위 하위 개념으로 시도를 나누고 구군 단위를 나누면 될듯
            // 그다음에 해당 동까지나오면 지오코드로 변환한 후에 실행시키면 될듯         
        }



        private void button2_Click(object sender, EventArgs e)
        {

            MessageBox.Show(richTextBox1.Text);
            si_check(article);
            // 그다음에 해당 동까지나오면 지오코드로 변환한 후에 실행시키면 될듯

        }

        private void button4_Click(object sender, EventArgs e)
        {
            WebClient WC = new WebClient();
            string url = "http://maps.googleapis.com/maps/api/geocode/xml?address="+location_a+location_b+location_c+"&sensor=true&hl=kr";
            MessageBox.Show(WC.DownloadString(url));

            try
            {
                XmlDocument xml = new XmlDocument(); //xml 문서 만들겠습니다. ㅋㅋ

                xml.Load(url);
                XmlNodeList xnList = xml.SelectNodes("/GeocodeResponse/result/geometry/location"); //접근할 노드(이거 가장 첫번째 값만 가져옴(정확도 순이라))

                foreach (XmlNode xn in xnList)
                {

                    string part1 = xn["lat"].InnerText; //지오코드에서 우리 뉴스의 위도 가져옴
                    string part2 = xn["lng"].InnerText; //지오코드에서 우리 뉴스의 경도를 가져옴


                    //MessageBox.Show(part1+part2); 테스트
                    label3.Text = "위도:"+part1;
                    label4.Text = "경도:" + part2;

                }

            }

            catch (ArgumentException ex)
            {

                MessageBox.Show("XML 문제 발생\r\n" + ex);

            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            article = richTextBox1.Text;
            string pattern = @"..구";
            string input = article;
            Match match = Regex.Match(input, pattern);
            
            string ko = match.Groups[0].Value;
            string ko2 = match.Groups[1].Value;
            string ko3 = match.Groups[2].Value;

            //MessageBox.Show(ko2);
            

            if (match.Success)
            {               
                MessageBox.Show("찾은결과:"+match.Value+"\n"+match.Index+1+"번째 문자");
                MessageBox.Show("구/군 DB가 아직 구축 되지 않아서 DB조회가 불가능합니다.");
            }
            else
                MessageBox.Show("구를 찾지 못했습니다.");
            //구로 끝나는 부분 찾아서 DB랑 조회해보아야됨.
            }
            

        private void button5_Click(object sender, EventArgs e)
        {
            article = richTextBox1.Text;
            string pattern = @"..동";
            string input = article;
            Match match = Regex.Match(input, pattern);
            if (match.Success)
            {
                MessageBox.Show("찾은결과:" + match.Value + "\n" + match.Index + 1 + "번째 문자");
                MessageBox.Show("동 DB가 아직 구축 되지 않아서 DB조회가 불가능합니다.");
            }
            else
                MessageBox.Show("동을 찾지 못했습니다.");
        
        
        }


    }
}
